/**
 * 문자열(한글==2) 길이 구하기
 * @param string
 * @return
 */
/*
function getByteLength( string ) {
    var len = 0;
    var str = string.substring(0);

    if ( str == null ) return 0;

    for(var i=0; i < str.length; i++) {
        var ch = escape(str.charAt(i));

        if( ch.length == 1 )
        	len++;
        else if( ch.indexOf("%u") != -1 ) 
        	len += 2;// 한글은 3바이트
        else if( ch.indexOf("%") != -1 ) 
        	len += parseInt( ch.length / 3);
    }

    return len;
}
*/
function isArray(obj) 
{
   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}

function getBytes(string)
{
    return encodeURIComponent(string).replace(/%../g, 'x').length;
}

/**
 * 파라미터값이 null 인지 비어있는 값인지 체크
 */
function isEmpty( value ) {
	if( value == null || value == "" )
		return true;
		
	return false;
}

function isBlank( value ) { 
	return ( value.replace(/\s/gi,"") == "" );
}

/**
 * 첨부파일 확장자 체크 (types에 체크를 원하는 확장자 배열 받음 : true면 확장자 배열에 만족)
 * @param String
 * @param Array
 * @return boolean
 */
function getFileExtension(filePath, types){
  var flag = false;
  var lastIndex = -1;
  lastIndex  = filePath.lastIndexOf('.');
  var extension = "";

  if(lastIndex != -1) {
    extension = filePath.substring( lastIndex+1, filePath.len );
  }else{
  	extension = "";
  }
  
  for(var i=0; i<types.length ; i++){
	if(extension.toLowerCase() == types[i]){
		flag = true;
		break;
	}
  }
  return flag;
}
 
/**
 * AJAX Object
 * @return object
 */
function getAjax(){
  var xmlHttp = false;
  try{
	xmlHttp = new ActiveXObject("MSXml2.XMLHTTP");
  }catch(e){
	try{
	  xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	}catch(e2){
	  xmlHttp = false;
	}
  }
  if(!xmlHttp && typeof XMLHttpRequest != 'undefined'){
	xmlHttp = new XMLHttpRequest();
  }
  return xmlHttp;
}

/**
 * SELECT 박스 초기화 function
 * @param SELECT 태그 id
 * @return
 */
function setInitSelect(sSelect)
{
	var selectObj = document.getElementById(sSelect);
	selectObj.options.length = 1;
}

/**
 * SELECT 태그의 값이 일치하는 것에 "selected=true" 설정하기
 * @param sSelect SELECT 태그 id
 * @param sValue 비교할 값
 * @return
 */
function setSelect( sSelect, sValue )
{
	var oSelect = document.getElementById( sSelect );
	for( var i = 0; i < oSelect.options.length; i++ ) {
		if( oSelect.options[i].value == sValue ) {
			oSelect.options[i].selected = true;
			break;
		}
	}
}

/**
 * INPUT-RADIO 태그의 값이 일치하는 것에 "checked=true" 설정하기
 * @param sRadio INPUT-RADIO 태그 name
 * @param sValue 비교할 값
 * @return
 */
function setRadio( sRadio, sValue )
{
	var oRadioList = document.getElementsByName( sRadio );
	var i = 0;
	while(oRadio = oRadioList[i++]) {
		if( oRadio.value == sValue ) {
			oRadio.checked = true;
			break;
		}
	}
}

 /**
  * INPUT-RADIO 태그중 현재 체크된 것의 value 가져오기
  * @param sRadio INPUT-RADIO 태그 name
  * @return 현재 체크된 요소의 value
  */
function getRadio( sRadio )
{
	var oRadioList = document.getElementsByName( sRadio );
	var i = 0;
	while(oRadio = oRadioList[i++]) {
		if( oRadio.checked == true ) {
			return oRadio.value;
			break;
		}
	}
	return "";
}

/**
 * INPUT-CHECKBOX 태그의 값이 일치하는 것에 "checked=true" 설정하기
 * @param sCheckbox INPUT-CHECKBOX 태그 name
 * @param stringArray 비교할 값(String 이나 String[])
 * @return
 */
function setCheckbox( sCheckbox, stringArray )
{
	var oCheckboxList = document.getElementsByName( sCheckbox );
	var bArray = isArray( stringArray );
	
	var oCheckbox;
	// 배열이 아니면 간단히 체크하고 우선 끝내기
	if( !bArray ) {
		oCheckbox = oCheckboxList[0];
		if( oCheckbox.value == stringArray ) {
			oCheckbox.checked = true;
		}
		return;
	}
	for( var i = 0; i < oCheckboxList.length; i++ ) {
		oCheckbox = oCheckboxList[i];
		
		for(var j = 0; j < stringArray.length; j++ ) {
			if( oCheckbox.value == stringArray[j] ) {
				oCheckbox.checked = true;
			}
		} // for j
	} // for i
}

function trim( str )
{
	return str.replace(/^\s+|\s+$/g,"");
}
function ltrim( str )
{
	return str.replace(/^\s+/,"");
}
function rtrim( str )
{
	return str.replace(/\s+$/,"");
}

/**
* 연계 새주소 검색창
* @param post 우편번호 입력필드 ID
* @param addr 주소 입력필드 ID
* @return
*/
function openJuso(mode)
{
	url = "/jsp/app/juso/jibun.jsp?mode="+mode;
	window.open(url, "", "resizable=no, status=no, scrollbars=yes, toolbar=no, menubar=no, width=440, height=410");
}

/**
 * 우편번호 검색 팝업창
 * @param post 우편번호 입력필드 ID
 * @param addr 주소 입력필드 ID
 * @return
 */
function openPost()
{
	var post = "post";
	var addr = "address/addressDetail";
	if( arguments.length == 2 ) {
		post = arguments[0]; 
		addr = arguments[1];
	}
	var winZipcode = window.open( "/app/post.do?post=" + post + "&addr=" + addr, "postSearch", "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizeable=0,width=530,height=495");
}
 
 /**
 * 우편번호 검색 팝업창 : 예외적인 경우 : 
 * 우편번호 필드 : 주소 필드
 */
function openPostExt(post, addr)
{
	var post = post;
	var addr = addr;
	if( arguments.length == 2 ) {
		post = arguments[0]; 
		addr = arguments[1];
	}
	var winZipcode = window.open( "/app/post.do?post=" + post + "&addr=" + addr, "postSearch", "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizeable=0,width=530,height=400");
}

function toPage(mCode){
	window.location.href = "/page.action?mCode="+mCode;
}

//TODO: 현재 URL(href)을 파싱해서 cIdx만으로 mCode 유지하게 하기
function toPage2(mCode, cIdx){
	window.location.href = "/page.action?mCode="+mCode+"&cidx="+cIdx;
}

/**
* 현재 입력한 키가 숫자인지 확인해서 아닐경우 무시
* @param event	텍스트박스(input-text)의 event
* @return 숫자키라면 true, 아니면 false
*/
function isNumberKey( event )
{
	var charCode = (event.which) ? event.which : event.keyCode;
	
	if( charCode > 31 && ( charCode < 48 || charCode > 57 ) )
		return false;

	return true;
}

/**
 * 
 * @param input 
 * @return
 */
function isNumeric(input)
{
	var pattern =/^[0-9]+$/;
	return pattern.test( input );
}

/**
 * 
 * @param input
 * @return
 */
function isAlpha(input)
{
	var pattern =/^[a-zA-Z]+$/;
	return pattern.test( input ); 
}

/**
 * 
 * @param input
 * @return
 */
function isInt(input) {
	return (input.toString().search(/^-?[0-9]+$/) == 0);
}

/**
 * 
 * @param input
 * @return
 */
function toInt(input) {
	if(input == "")
		return 0;
	
	if( isInt( input ) )
		return parseInt( input, 10 );
	else
		return 0;
}

/**
 * check Unsigned Integer
 * @param input
 * @return
 */
function isUInt(input) {
	return (input.toString().search(/^[0-9]+$/) == 0);
}

function isEmail( input )
{
	 var pattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
	 return pattern.test( input ); 
	  
}

function isPost( post )
{

}

function isUrl( url )
{
	
}

function removeTag( html )
{
	return html.replace(/<[^>]+>/g, "");
}

function toComma( val )
{
	var input = String( val ); 
	var reg = /(\-?\d+)(\d{3})($|\.\d+)/; 
	if(reg.test(input)){ 
	  return input.replace(reg, function(str, p1,p2,p3) { 
              									 	return toComma(p1) + "," + p2 + "" + p3; 
          											 }     
      ); 
	}else{ 
	  return input; 
	} 

}

/**
 * 이미지 파일인가? input-file 에서 확장자 체크 목적.
 * @param input 파일명
 * @return
 */
function isImage(input)
{
	var pattern =/.+\.(jpg|gif|jpeg|png)$/;
	return pattern.test( input ); 
}

   /**
   *  날짜여부 Check
   *  @param          psValue : 날짜 8자리
   *  @return       true : Date false : not Date
   */
   function isDate(psValue)
   {
      var checkstr = "0123456789";
      var s_date_val = "";
      var s_date_tmp = "";
      var s_sepe_str = "/";
      var day;
      var month;
      var year;
      var leap = 0;
      var err = 0;
      var i;
      err = 0;
      s_date_val = psValue;

      /* 숫자가 아닌 문자 삭제 */
      for (i = 0; i < s_date_val.length; i++) 
      {
         if (checkstr.indexOf(s_date_val.substr(i,1)) >= 0) 
         {
            s_date_tmp = s_date_tmp + s_date_val.substr(i,1);
         }
      }
      s_date_val = s_date_tmp;

      if(s_date_val.length != 8)
      {
         return false;
      }

      /* 월의 유효성 체크 */
      month = s_date_val.substr(4,2);
      if ((month < 1) || (month > 12)) 
      {
         return false;
      }
      /* 날짜의 유효성 체크 */
      day = s_date_val.substr(6,2);
      if (day < 1) 
      {
         return false;
      }
      /* 윤년/2월 체크 */
      if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) 
      {
         leap = 1;
      }
      if ((month == 2) && (leap == 1) && (day > 29)) 
      {
         return false;
      }
      if ((month == 2) && (leap != 1) && (day > 28)) 
      {
         return false;
      }
      /* 기타 월의 유효성 체크  */
      if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) 
      {
         return false;
      }
      if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) 
      {
         return false;
      }
      /* 00 입력시 입력내용 삭제 */
      if ((day == 0) && (month == 0) && (year == 00)) 
      {
         return false;
      }
      return true;
   }

   /**!!
   *  개요 : Cookie값 set하는 method
   *  @param           name  Cookie이름 
   *                 value Cookie값
   *  @return        
   !!**/
   function setCookie(name, value)
   {
      var argv = setCookie.arguments;
      var argc = setCookie.arguments.length;

      var expires = (argc > 2) ? argv[2] : null;
      var path = (argc > 3) ? argv[3] : "/";
      var domain = (argc > 4) ? argv[4] : null;
      var secure = (argc > 5) ? argv[5] : false;
      document.cookie = name + "=" + escape (value) +
                     ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
                     ((path == null) ? "" : ("; path=" + path)) +
                     ((domain == null) ? "" : ("; domain=" + domain)) +
                     ((secure == true) ? "; secure" : "");
   }

   /**!!
   *  개요 : Cookie값 Get하는 method
   *  @param           name  Cookie이름 
   *                 
   *  @return        Cookie value
   **/
   /**
    * 
    */
   function getCookie(Name) 
   {
      var a = document.cookie.indexOf(Name + "=");
      var b = 0;
      if (a != -1) 
      {
         a += Name.length + 1; 
         b = document.cookie.indexOf(";", a);
         if (b == -1) 
            b = document.cookie.length;
      }
      return unescape(document.cookie.substring(a, b));
   }

   /*
    * 각 필드 널체크
    * */
   function chkfield(field, name)
   {
   	if (field.value == "") {
   		alert(name + " 항목을 반드시 입력해 주십시오.");
   		field.focus();
   		return;
   	}
       return true;
   }
  //라디오버튼 선택항목이 두개일 때
    function chkcheck( chk_field, chk_field1, chk_field2, name)
    {
    	if (chk_field1 == false && chk_field2 == false) {
    		alert(name + " 항목을 반드시 선택해 주십시오.");
    		chk_field.focus();
    		return;
    	}
    	return true;
    }

    //라이오버튼 선택항목이 세개일 때
    function chkradio( chk_frm, chk_radio, name )
    {
    	radioObj = eval(chk_frm + "." + chk_radio); 
    	if (radioObj[0].checked == false && radioObj[1].checked == false && radioObj[2].checked == false) {
    		alert(name + " 항목을 반드시 선택해 주십시오.");
    		radioObj[0].focus();
    		return;
    	}
    	return true;
    }

    function chkfield_num(field)
    {
    	if ( field.value.match(/[^0-9]/) )
    	{
    		alert("숫자만 입력하여 주세요");
    		field.focus();
            return;
        }
        return true;
    }
    //프린트 출력
    function SPrint( PURL )
    {
    	var popup = window.open(PURL, "Print", "resizable=no,scrollbars=yes,left=0,top=0,width=800,height=600");
    	popup.focus();
    	popup.print();
    }
    //숫자만 입력
    function onlynum(objtext1){
    	var inText = objtext1.value;
    	var ret;
    	for (var i = 0; i <= inText.length; i++) {
    	    ret = inText.charCodeAt(i);
    		if ((ret <=47 && ret > 31) || ret >= 58)  {
    			alert("숫자만을 입력하세요");
    			objtext1.value = "";
    			objtext1.focus();
    			return false;
    		}
    	}
    	return true;
    }

    //새주소 새창 띄우기
    // 가급적 사용하지 말고 openMap2 를 사용할 것
    function openMap( mgr )
    {
      window.open("http://address.seoul.go.kr/OneClick/OneClickMap.asp?mgr="+mgr+"", "new", "width=600, height=450, top=0, left=0 resizable=no");
    }
    
    // 새주소 새창 띄우기
    // <a href="http://address.seoul.go.kr/OneClick/OneClickMap.asp?mgr=xxxxx" onclick="return openMap2(this.href);">...</a>
    function openMap2( url )
    {
    	window.open(url, "new", "width=600, height=450, top=0, left=0 resizable=no");
    	return false;
    }
    
    //공용 다운로드
    function download()
    {
    	var addPath = "";
    	var fileNm = "";
    	
    	if( arguments.length == 1 ) {
    		fileNm = arguments[0]; 
    	}
    	else {
    		addPath = arguments[0];
    		fileNm = arguments[1];
    	}

      location.href = "/app/download.do?addPath=" + addPath + "&fileNm=" + fileNm;
    }
   
   // 메일보내기 팝업창
   function openEmail( recvEmail ) {
  	 var win = window.open('/app/email.do?recvEmail=' + recvEmail,'openEmail','width=500,height=542,top=100,left=100');
   }
   
   // 소스상에 나타나는 메일주소 등을 간단히 XOR 디코딩 하기 위해..
   function decodeXor( email ) {
  	 
   }

   
   /////////////////////////////드림위버상 FUNCTION : S
   function MM_swapImgRestore() { //v3.0
	   var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
   }

   function MM_preloadImages() { //v3.0
      var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
      var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
     if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
   }

   function MM_findObj(n, d) { //v4.01
      var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
      d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
      if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
      for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
      if(!x && d.getElementById) x=d.getElementById(n); return x;
   }

   function MM_swapImage() { //v3.0
      var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
      if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
   }
   /////////////////////////////드림위버상 FUNCTION :E
   
   function gis_Open(x,y,z)
   {

   var url = "http://gis.seoul.go.kr/SeoulGis/LifeMap_gu.jsp?";
   var OfficeName = encodeURIComponent("영등포구");
   var SisulName = encodeURIComponent(x);
   var Dong_Info = encodeURIComponent(y);
   var Bunji_Info = encodeURIComponent(z);
   var San_Yn = 1;
   var ImgDir = 1;
   var SecTorYN = "Y";

   url += "OfficeName=" + OfficeName + "&SisulName=" + SisulName + "&Dong_Info=" + Dong_Info + "&Bunji_Info=" + Bunji_Info + "&San_Yn=1&ImgDir=1&SecTorYN=Y&Mode=1" ;
   window.open(url, 'SeoulGis', 'width=1100,height=600,status=yes,toolbar=no,menubar=no,location=no,directories=no');
   //top.window.location = url;
   }
/////서울시 GIS
   
   //컨텍스트 루트 구하기
   function getContextPath(){
	    var offset=location.href.indexOf(location.host)+location.host.length;
	    var ctxPath=location.href.substring(offset,location.href.indexOf('/',offset+1));
	    return ctxPath;
	}